package com.jhs.kjs.model;

import org.apache.commons.lang.StringUtils;

import com.jhs.kjs.dto.UserDTO;
import com.jhs.kjs.handler.exception.AldangMessegeException;
import com.jhs.kjs.service.IUserService;

public class UserModel {
	IUserService userService;
	public static final int minimumPw = 7;
	public static final int minimumId = 3;
	public static final String USER_ID = "userId";
	public static final String USER_INDEX = "userIndex";
	public static final String USER_LEVEL = "userLevel";
	public static final String USER_NAME = "userName";
	public static final String USER_POINT = "userPoint";
	public static final String USER_SESSION_INFO = "userSessionInfo";

	public UserModel(IUserService userService) {
		this.userService = userService;
	}

	public void insertValidateUser(UserDTO user) {

		if (user.getUserId() == null)
			throw new AldangMessegeException("아이디를 입력해주세요.");
		checkId(user);
		validateUser(user);
		Integer cnt = userService.checkDupl(user);

		if (cnt != null) {
			throw new AldangMessegeException(
					"동일한 아이디가 사용중입니다. 다른 아이디를 사용해 주세요.");
		}
	}

	public void validateUser(UserDTO user) {
		checkNull(user);
		checkPW(user);
		user.getCellPhone();
		user.getEmail();

	}

	private void checkNull(UserDTO user) {

		if (user.getUserPw() == null)
			throw new AldangMessegeException("패쓰워드를 입력해주세요.");
		if (user.getUserName() == null)
			throw new AldangMessegeException("사용자이름을 입력해주세요.");
	}

	private void checkId(UserDTO user) {
		checkId(user.getUserId());
		checkLength("아이디를 ", user.getUserId(), UserModel.minimumId);

	}

	public void checkId(String id) {
		String reg = "[a-zA-Z0-9_]";
		if (id.replaceAll(reg, "").length() > 0)
			throw new AldangMessegeException("아이디는 영어와 숫자만 됩니다.");
	}

	private void checkPW(UserDTO user) {
		checkLength("패쓰워드를 ", user.getUserPw(), UserModel.minimumPw);
		isSameWithId(user);
	}

	private void checkLength(String msg, String str, int minimumLength) {
		if (str.length() < minimumLength)
			throw new AldangMessegeException(msg + minimumLength
					+ " 글자 이상 입력해주세요.");
	}

	private void isSameWithId(UserDTO user) {
		if (StringUtils.isEmpty(user.getUserId()))
			return;

		if (user.getUserId().equals(user.getUserPw()))
			throw new AldangMessegeException("아이디와 패쓰워드가 동일합니다. 다시 입력해주세요");
	}

}
